package com.xydtech.ecard.merchant.service.impl;

import com.alibaba.fastjson.JSONObject;
import com.xydtech.common.core.domain.entity.SysDept;
import com.xydtech.ecard.merchant.domain.*;
import com.xydtech.ecard.merchant.mapper.EcardBranchPersonChartMapper;
import com.xydtech.ecard.merchant.service.IEcardBranchPersonChartService;
import com.xydtech.system.service.ISysDeptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 电子名片个人信息图表统计Service业务层处理
 *
 * @author yuzhiguo
 * @date 2024-09-13 上午11:26
 */
@Service
public class EcardBranchPersonChartServiceImpl implements IEcardBranchPersonChartService {

    @Autowired
    private EcardBranchPersonChartMapper ecardBranchPersonChartMapper;
    @Autowired
    private ISysDeptService sysDeptService;

    /**
     * 本人个人建档拜访数量
     * @param userId
     * @param perType 个人客户类型，1：农户，2：新市民
     * @return
     */
    @Override
    public JSONObject getPerFilingVisitsStatistics(Long userId, String perType) {
        JSONObject statisticsData = new JSONObject();
        List<EcardBranchEcardChart> perFilingVisitsNums = ecardBranchPersonChartMapper.selectPerFilingVisitsByUserId(userId, perType);
        statisticsData.put("perPerFilingNums",perFilingVisitsNums.get(0).getMerchantNum());//个人本人累计建档总数
        statisticsData.put("perPerVisitNums",perFilingVisitsNums.get(1).getMerchantNum());//个人本人累计拜访总数
        statisticsData.put("perPerDoVisitNums",perFilingVisitsNums.get(2).getMerchantNum());//个人本人超时拜访总数
        statisticsData.put("perPerUnDoVisitNums",perFilingVisitsNums.get(3).getMerchantNum());//个人本人超时未拜访总数
        statisticsData.put("perPerFilingThisMonthNums",perFilingVisitsNums.get(4).getMerchantNum());//个人本人本月新增建档总数
        statisticsData.put("perPerFilingCompareNums",perFilingVisitsNums.get(4).getMerchantNum() - perFilingVisitsNums.get(5).getMerchantNum());//个人本人建档较上月对比
        if (statisticsData.getLong("perPerFilingCompareNums") >= 0){
            statisticsData.put("perPerFilingType", "1");//较上月个人本人建档类型（1：上升，2：下降）
        } else {
            statisticsData.put("perPerFilingType", "2");//较上月个人本人建档类型（1：上升，2：下降）
        }
        statisticsData.put("perPerVisitThisMonthNums",perFilingVisitsNums.get(6).getMerchantNum());//个人本人本月新增拜访总数
        statisticsData.put("perPerVisitCompareNums",perFilingVisitsNums.get(6).getMerchantNum() - perFilingVisitsNums.get(7).getMerchantNum());//个人本人拜访较上月对比
        if (statisticsData.getLong("perPerVisitCompareNums") >= 0){
            statisticsData.put("perPerVisitType", "1");//较上月个人本人拜访类型（1：上升，2：下降）
        } else {
            statisticsData.put("perPerVisitType", "2");//较上月个人本人拜访类型（1：上升，2：下降）
        }
        return statisticsData;
    }

    /**
     * 本人网格建档数量
     * @param userId
     * @return
     */
    @Override
    public JSONObject getPerAreaFilings(Long userId) {
        JSONObject statisticsData = new JSONObject();
        List<EcardBranchEcardChart> perFilingVisitsNums = ecardBranchPersonChartMapper.getPerAreaFilings(userId);
        statisticsData.put("perAreaFilingNums",perFilingVisitsNums.get(0).getMerchantNum());//个人本人网格累计建档总数
        statisticsData.put("perAreaFilingThisMonthNums",perFilingVisitsNums.get(1).getMerchantNum());//个人本人本月网格新增建档总数
        statisticsData.put("perAreaFilingCompareNums",perFilingVisitsNums.get(1).getMerchantNum() - perFilingVisitsNums.get(2).getMerchantNum());//个人本人网格建档较上月对比
        if (statisticsData.getLong("perAreaFilingCompareNums") >= 0){
            statisticsData.put("perAreaFilingType", "1");//较上月个人本人网格建档类型（1：上升，2：下降）
        } else {
            statisticsData.put("perAreaFilingType", "2");//较上月个人本人网格建档类型（1：上升，2：下降）
        }
        return statisticsData;
    }

    /**
     * 全行个人建档拜访数量
     * @param deptId
     * @param perType 个人客户类型，1：农户，2：新市民
     * @return
     */
    @Override
    public JSONObject getPerAllFilingVisitsNums(Long deptId, String perType) {
        SysDept sysDept = sysDeptService.selectSecondLevelDeptByDeptId(deptId);
        JSONObject statisticsData = new JSONObject();
        List<EcardBranchEcardChart> allFilingVisitsNums = ecardBranchPersonChartMapper.getPerAllFilingVisitsNums(sysDept.getDeptId(), perType);
        statisticsData.put("perFilingNums",allFilingVisitsNums.get(0).getMerchantNum());//全行个人建档总数
        statisticsData.put("perFilingLastMonthNums",allFilingVisitsNums.get(1).getMerchantNum());//上月新增个人建档总数
        statisticsData.put("perFilingThisMonthNums",allFilingVisitsNums.get(2).getMerchantNum());//本月新增个人建档总数
        statisticsData.put("perFilingCompareNums",allFilingVisitsNums.get(2).getMerchantNum() - allFilingVisitsNums.get(1).getMerchantNum());//个人建档较上月对比
        statisticsData.put("perVisitNums",allFilingVisitsNums.get(3).getMerchantNum());//个人拜访总次数
        statisticsData.put("perVisitLastMonthNums",allFilingVisitsNums.get(4).getMerchantNum());//上月新增个人拜访总数
        statisticsData.put("perVisitThisMonthNums",allFilingVisitsNums.get(5).getMerchantNum());//本月新增个人拜访总数
        statisticsData.put("perVisitCompareNums",allFilingVisitsNums.get(5).getMerchantNum() - allFilingVisitsNums.get(4).getMerchantNum());//个人拜访较上月对比
        return statisticsData;
    }

    /**
     * 全行网格建档数量
     * @param deptId
     * @return
     */
    @Override
    public JSONObject getPerAllAreaFilings(Long deptId) {
        SysDept sysDept = sysDeptService.selectSecondLevelDeptByDeptId(deptId);
        JSONObject statisticsData = new JSONObject();
        List<EcardBranchEcardChart> allFilingVisitsNums = ecardBranchPersonChartMapper.getPerAllAreaFilings(sysDept.getDeptId());
        statisticsData.put("perAreaFilingNums",allFilingVisitsNums.get(0).getMerchantNum());//全行网格建档总数
        statisticsData.put("perAreaFilingLastMonthNums",allFilingVisitsNums.get(1).getMerchantNum());//上月新增网格建档总数
        statisticsData.put("perAreaFilingThisMonthNums",allFilingVisitsNums.get(2).getMerchantNum());//本月新增网格建档总数
        statisticsData.put("perAreaFilingCompareNums",allFilingVisitsNums.get(2).getMerchantNum() - allFilingVisitsNums.get(1).getMerchantNum());//网格建档较上月对比
        return statisticsData;
    }

    /**
     * 个人超时拜访数量
     * @param deptId
     * @param perType 个人客户类型，1：农户，2：新市民
     * @return
     */
    @Override
    public JSONObject getPerTimeoutVisitsNums(Long deptId, String perType) {
        SysDept sysDept = sysDeptService.selectSecondLevelDeptByDeptId(deptId);
        JSONObject statisticsData = new JSONObject();
        List<EcardBranchEcardChart> allTimeoutVisitsNums = ecardBranchPersonChartMapper.getPerTimeoutVisitsNums(sysDept.getDeptId(), perType);
        statisticsData.put("perDoTaskNums",allTimeoutVisitsNums.get(0).getDoTaskSum());//个人超时拜访总数
        statisticsData.put("perDoTaskLastMonthNums",allTimeoutVisitsNums.get(1).getDoTaskSum());//上月新增个人超时拜访总数
        statisticsData.put("perDoTaskThisMonthNums",allTimeoutVisitsNums.get(2).getDoTaskSum());//本月新增个人超时拜访总数
        statisticsData.put("perDoTaskCompareNums",allTimeoutVisitsNums.get(2).getDoTaskSum() - allTimeoutVisitsNums.get(1).getDoTaskSum());//个人超时拜访较上月对比
        statisticsData.put("perUndoTaskNums",allTimeoutVisitsNums.get(3).getDoTaskSum());//个人超时未拜访总次数
        statisticsData.put("perUndoTaskLastMonthNums",allTimeoutVisitsNums.get(4).getDoTaskSum());//上月新增个人超时未拜访总数
        statisticsData.put("perUndoTaskThisMonthNums",allTimeoutVisitsNums.get(5).getDoTaskSum());//本月新增个人超时未拜访总数
        statisticsData.put("perUndoTaskCompareNums",allTimeoutVisitsNums.get(5).getDoTaskSum() - allTimeoutVisitsNums.get(4).getDoTaskSum());//个人超时未拜访较上月对比
        return statisticsData;
    }

    /**
     * 查询个人信息建档折线图数据
     * @param deptId
     * @param perType 个人客户类型，1：农户，2：新市民
     * @return
     */
    @Override
    public List<EcardBranchEcardChart> getPerFilingLineChart(Long deptId, String perType) {
        SysDept sysDept = sysDeptService.selectSecondLevelDeptByDeptId(deptId);
        return ecardBranchPersonChartMapper.getPerFilingLineChart(sysDept.getDeptId(), perType);
    }

    /**
     * 查询个人信息建档折线图数据（小程序接口）
     * @param deptId
     * @param perType 个人客户类型，1：农户，2：新市民
     * @return
     */
    @Override
    public List<EcardBranchEcardChart> getPerFilingLineChartByApplet(Long deptId, String perType) {
        SysDept sysDept = sysDeptService.selectSecondLevelDeptByDeptId(deptId);
        return ecardBranchPersonChartMapper.getPerFilingLineChartByApplet(sysDept.getDeptId(), perType);
    }

    /**
     * 查询个人信息拜访折线图数据
     * @param deptId
     * @param perType 个人客户类型，1：农户，2：新市民
     * @return
     */
    @Override
    public List<EcardBranchEcardChart> getPerVisitLineChart(Long deptId, String perType) {
        SysDept sysDept = sysDeptService.selectSecondLevelDeptByDeptId(deptId);
        return ecardBranchPersonChartMapper.getPerVisitLineChart(sysDept.getDeptId(), perType);
    }

    /**
     * 查询个人信息拜访折线图数据（小程序接口）
     * @param deptId
     * @param perType 个人客户类型，1：农户，2：新市民
     * @return
     */
    @Override
    public List<EcardBranchEcardChart> getPerVisitLineChartByApplet(Long deptId, String perType) {
        SysDept sysDept = sysDeptService.selectSecondLevelDeptByDeptId(deptId);
        return ecardBranchPersonChartMapper.getPerVisitLineChartByApplet(sysDept.getDeptId(), perType);
    }

    /**
     * 机构个人建档排名
     * @param ecardBranchDeptFiling
     * @return
     */
    @Override
    public List<EcardBranchDeptFiling> getPerDeptFilingList(EcardBranchDeptFiling ecardBranchDeptFiling) {
        return ecardBranchPersonChartMapper.getPerDeptFilingList(ecardBranchDeptFiling);
    }

    /**
     * 机构个人拜访次数排名
     * @param ecardBranchDeptVisit
     * @return
     */
    @Override
    public List<EcardBranchDeptVisit> getPerDeptVisitsList(EcardBranchDeptVisit ecardBranchDeptVisit) {
        return ecardBranchPersonChartMapper.getPerDeptVisitsList(ecardBranchDeptVisit);
    }

    /**
     * 机构个人超时拜访次数排名
     * @param ecardBranchDeptDoTask
     * @return
     */
    @Override
    public List<EcardBranchDeptDoTask> getPerDeptDoTaskList(EcardBranchDeptDoTask ecardBranchDeptDoTask) {
        return ecardBranchPersonChartMapper.getPerDeptDoTaskList(ecardBranchDeptDoTask);
    }

    /**
     * 机构个人超时未拜访次数排名
     * @param ecardBranchDeptUndoTask
     * @return
     */
    @Override
    public List<EcardBranchDeptUndoTask> getPerDeptUnDoTaskList(EcardBranchDeptUndoTask ecardBranchDeptUndoTask) {
        return ecardBranchPersonChartMapper.getPerDeptUnDoTaskList(ecardBranchDeptUndoTask);
    }

    /**
     * 营销人员个人建档排名
     * @param ecardBranchUserFiling
     * @return
     */
    @Override
    public List<EcardBranchUserFiling> getPerUserFilingList(EcardBranchUserFiling ecardBranchUserFiling) {
        return ecardBranchPersonChartMapper.getPerUserFilingList(ecardBranchUserFiling);
    }

    /**
     * 营销人员个人拜访次数排名
     * @param ecardBranchUserVisit
     * @return
     */
    @Override
    public List<EcardBranchUserVisit> getPerUserVisitsList(EcardBranchUserVisit ecardBranchUserVisit) {
        return ecardBranchPersonChartMapper.getPerUserVisitsList(ecardBranchUserVisit);
    }

    /**
     * 营销人员个人超时拜访次数排名
     * @param ecardBranchUserDoTask
     * @return
     */
    @Override
    public List<EcardBranchUserDoTask> getPerUserDoTaskList(EcardBranchUserDoTask ecardBranchUserDoTask) {
        return ecardBranchPersonChartMapper.getPerUserDoTaskList(ecardBranchUserDoTask);
    }

    /**
     * 营销人员个人超时未拜访次数排名
     * @param ecardBranchUserUndoTask
     * @return
     */
    @Override
    public List<EcardBranchUserUndoTask> getPerUserUnDoTaskList(EcardBranchUserUndoTask ecardBranchUserUndoTask) {
        return ecardBranchPersonChartMapper.getPerUserUnDoTaskList(ecardBranchUserUndoTask);
    }
}
